package view.backing.almacen;

import chemtools_logica.Beans.AlmacenBean;
import chemtools_logica.Beans.InsumoBean;
import chemtools_logica.Beans.ProductoBean;

import chemtools_logica.LN.IR.LN_SFAlmacenRemote;

import chemtools_logica.LN.IR.LN_SFUbigeoRemote;

import java.util.ArrayList;
import java.util.Date;
import java.util.Hashtable;

import java.util.List;

import javax.annotation.PostConstruct;

import javax.faces.event.ActionEvent;

import javax.faces.event.ValueChangeEvent;
import javax.faces.event.ValueChangeListener;

import javax.faces.model.SelectItem;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import oracle.adf.view.rich.component.rich.RichForm;
import oracle.adf.view.rich.component.rich.RichPopup;
import oracle.adf.view.rich.component.rich.data.RichTable;

import oracle.adf.view.rich.component.rich.input.RichInputText;
import oracle.adf.view.rich.component.rich.input.RichSelectOneChoice;
import oracle.adf.view.rich.component.rich.layout.RichPanelGridLayout;

import oracle.adf.view.rich.component.rich.nav.RichButton;

import org.apache.myfaces.trinidad.event.SelectionEvent;

import view.backing.Utils.Utils;

public class Frm_almacen {
    
    private LN_SFAlmacenRemote lN_SFAlmacenRemote;
    private LN_SFUbigeoRemote lN_SFUbigeoRemote;
    
    private bSessionScopeBeanalmacen sessionScopeBeanalmacen= new bSessionScopeBeanalmacen();
    private RichForm form;
    private RichTable tb_Almacen;
    private RichPanelGridLayout pf_Busqueda;
    private RichInputText codigoInputBusqueda;
    private RichInputText nombreInputBusqueda;
    private RichPopup pop_addAlmacen;
    private RichPopup popEdit;
    private RichButton btnEditar;
    private RichButton btnAgregar;
    private RichSelectOneChoice selectProvincia;
    private RichSelectOneChoice selectDistrito;
    private RichSelectOneChoice selectDepartamento;

    @PostConstruct
    public void methodInvokeOncedOnPageLoad() {
        try {
           final Context context = getInitialContext();
            
           lN_SFAlmacenRemote = (LN_SFAlmacenRemote) context.lookup("map-LN_SFAlmacen#chemtools_logica.LN.IR.LN_SFAlmacenRemote");  
           lN_SFUbigeoRemote = (LN_SFUbigeoRemote) context.lookup("map-LN_SFUbigeo#chemtools_logica.LN.IR.LN_SFUbigeoRemote"); 
        } catch (Exception e) {
            
        }
        sessionScopeBeanalmacen.setListaAlmacen(lN_SFAlmacenRemote.getAllAlmacen());
        sessionScopeBeanalmacen.setListaEstados(this.llenarEstados());
        sessionScopeBeanalmacen.setListaDepart(this.llenarDepartamentos());
    }
    
    public void limpiaryRefrescar(ActionEvent event){
        
        sessionScopeBeanalmacen.setEstadoBuscar(-1);
        sessionScopeBeanalmacen.setNombreBuscar(null);
        
        
        sessionScopeBeanalmacen.setListaAlmacen(lN_SFAlmacenRemote.getAllAlmacen());
        getTb_Almacen().setValue(sessionScopeBeanalmacen.getListaAlmacen());
        
        Utils.addTarget(getTb_Almacen());
        Utils.addTarget(getPf_Busqueda());
        
        getBtnEditar().setDisabled(true);
        Utils.addTarget(getBtnEditar());
        Utils.clearRowSelection(getTb_Almacen());
                   
    }
    public void nuevoAlmacen(ActionEvent event){
         String nombre=sessionScopeBeanalmacen.getNombreNuevo();
         //int capacidad= Integer.parseInt(sessionScopeBeanalmacen.getCapacidadNuevo());
         int tipoAlmacen=sessionScopeBeanalmacen.getTipoAlmacenNuevo();
         String direccion=sessionScopeBeanalmacen.getDireccionNuevo();
         String departamento=sessionScopeBeanalmacen.getIdDepartamentoNuevo();
         String provincia=sessionScopeBeanalmacen.getIdProviciaNuevo();
         String distrito=sessionScopeBeanalmacen.getIdDistritoNuevo();
         String codigo=sessionScopeBeanalmacen.getIdAlmacenNuevo();
         String telefono =sessionScopeBeanalmacen.getTelefonoNuevo();
         
         AlmacenBean beanAlmacen = new AlmacenBean();
        
         beanAlmacen.setNombre(nombre);
         beanAlmacen.setCapacidad(100);
         beanAlmacen.setTipoAlmacen(tipoAlmacen);
         beanAlmacen.setDireccion(direccion);
         beanAlmacen.setIdDepartamento(departamento);
         beanAlmacen.setIdProvicia(provincia);
         beanAlmacen.setIdDistrito(distrito);
         beanAlmacen.setEstado(1);
         beanAlmacen.setTelefono(telefono);
         
         lN_SFAlmacenRemote.addAlmacen(beanAlmacen);
         this.limpiaryRefrescar(null);
         Utils.showMessage("Se registro un nuevo Almacen correctamente", null, 2);
         getPop_addAlmacen().hide();
    } 
    
    public void editarAlmacen(ActionEvent event){
        AlmacenBean beanAlmacen= sessionScopeBeanalmacen.getAlmacenSeleccionado();
        boolean entra = false;
        int tAlmacen = beanAlmacen.getTipoAlmacen();
        if(tAlmacen == 2){//PRODUCTO (2)
            entra = lN_SFAlmacenRemote.almcenTieneProducto(beanAlmacen.getIdAlmacen());
        }else{//INSUMO (1)
            entra = lN_SFAlmacenRemote.almcenTieneInsumo(beanAlmacen.getIdAlmacen());
        }
        if(sessionScopeBeanalmacen.isCambioHecho() && entra){
            int capacidad=sessionScopeBeanalmacen.getCapacidadEdit();
            int estado=sessionScopeBeanalmacen.getEstadoEdit();
            
            beanAlmacen.setCapacidad(capacidad);
            beanAlmacen.setEstado(estado);

            lN_SFAlmacenRemote.updateAlmacen(beanAlmacen);
            Utils.showMessage("Se guardaron los cambios del Almacen correctamente", null, 2);
            getPopEdit().hide();
            
            sessionScopeBeanalmacen.setListaAlmacen(lN_SFAlmacenRemote.getAllAlmacen());
            getTb_Almacen().setValue(sessionScopeBeanalmacen.getListaAlmacen());
            Utils.clearRowSelection(getTb_Almacen());
            Utils.addTarget(tb_Almacen);
            
            getBtnEditar().setDisabled(true);
            Utils.addTarget(getBtnEditar());
            this.limpiaryRefrescar(null);
        }else{
            if(entra == false){
                Utils.showMessage("El Almacen no se puede desactivar ya que tiene Insumos/Productos asociadas", null, 2); 
            }
            getPopEdit().hide();   
        }
    }
    
    public void cambioHecho(ValueChangeEvent vce ){
        sessionScopeBeanalmacen.setCambioHecho(true);
    }
    
    public void mostrarpopEdit(ActionEvent event){
        AlmacenBean beanAlmacen= sessionScopeBeanalmacen.getAlmacenSeleccionado();
        
        sessionScopeBeanalmacen.setNombreEdit(beanAlmacen.getNombre());
        sessionScopeBeanalmacen.setTipoAlmacenEdit(beanAlmacen.getTipoAlmacentxt());
        
        sessionScopeBeanalmacen.setDireccionEdit(beanAlmacen.getDireccion());
        sessionScopeBeanalmacen.setTelefonoEdit(beanAlmacen.getTelefono());
        sessionScopeBeanalmacen.setIdDistritoEdit(beanAlmacen.getIdDistritoNombre());
        sessionScopeBeanalmacen.setIdProviciaEdit(beanAlmacen.getIdProviciaNombre());
        sessionScopeBeanalmacen.setIdDepartamentoEdit(beanAlmacen.getIdDepartamentoNombre());
        //sessionScopeBeanalmacen.setCapacidadEdit(beanAlmacen.getCapacidad());

        //sessionScopeBeanalmacen.setIdDistritoEdit(beanAlmacen.getIdDistrito());
        //sessionScopeBeanalmacen.setIdProviciaEdit(beanAlmacen.getIdProvicia());
        //sessionScopeBeanalmacen.setIdDepartamentoEdit(beanAlmacen.getIdDepartamento());
        sessionScopeBeanalmacen.setCapacidadEdit(beanAlmacen.getCapacidad());

        sessionScopeBeanalmacen.setEstadoEdit(beanAlmacen.getEstado());
        
        Utils.showPopUpMIDDLE(getPopEdit());
        
    }
    
    public void mostrarpopAgregar(ActionEvent event){
       sessionScopeBeanalmacen.setNombreNuevo("");
       //sessionScopeBeanalmacen.setCapacidadNuevo("");
       sessionScopeBeanalmacen.setTipoAlmacenNuevo(0);
       sessionScopeBeanalmacen.setDireccionNuevo("");
       sessionScopeBeanalmacen.setIdDepartamentoNuevo("");
       sessionScopeBeanalmacen.setIdProviciaNuevo("");
       sessionScopeBeanalmacen.setIdDistritoNuevo("");
       sessionScopeBeanalmacen.setTelefonoNuevo("");
             
       Utils.showPopUpMIDDLE(getPop_addAlmacen());
    }
    
    public void buscarAlmacen(ActionEvent event){
        
        int estado = sessionScopeBeanalmacen.getEstadoBuscar();
        String nombre=sessionScopeBeanalmacen.getNombreBuscar();
        int capacidad=sessionScopeBeanalmacen.getCapacidadBuscar();
        
        AlmacenBean tAlmacen = new AlmacenBean();
        tAlmacen.setEstado(estado);
        tAlmacen.setNombre(nombre);
        tAlmacen.setCapacidad(capacidad);
        
        sessionScopeBeanalmacen.setListaAlmacen(new ArrayList<AlmacenBean>());
        sessionScopeBeanalmacen.setListaAlmacen(lN_SFAlmacenRemote.busquedaAlmacen(tAlmacen));
        getTb_Almacen().setValue(sessionScopeBeanalmacen.getListaAlmacen());
        
        Utils.addTarget(getTb_Almacen());
        getBtnEditar().setDisabled(true);
        Utils.addTarget(getBtnEditar());
        Utils.clearRowSelection(getTb_Almacen());
    }
    
    public void almacenSelect(SelectionEvent se){
            RichTable t = (RichTable)se.getSource();
            AlmacenBean beanAlmacen = (AlmacenBean) t.getSelectedRowData();
            sessionScopeBeanalmacen.setAlmacenSeleccionado(beanAlmacen);
            
            getBtnEditar().setDisabled(false);
            //getBtnAgregar().setDisabled(true);
            Utils.addTarget(getBtnEditar());
        }
    
    public ArrayList llenarEstados() {
        ArrayList estados = new ArrayList();
        estados.add(new SelectItem(0,"Inactivo"));
        estados.add(new SelectItem(1,"Activo"));
        
        return estados;
    }
    public ArrayList llenarDepartamentos() {
        ArrayList departamentos = new ArrayList();
        List<chemtools_logica.Entidades.Ubigeo> lista = lN_SFUbigeoRemote.getUbigeo(null, "00", "00");
        for(chemtools_logica.Entidades.Ubigeo ent : lista){
            departamentos.add(new SelectItem(ent.getCod_dept(),ent.getDepartamento()));
        }
        return departamentos;
    }
    
    public void llenarProvincias(ValueChangeEvent valueChangeEvent){
        String idDepartamento = valueChangeEvent.getNewValue().toString();
        ArrayList provincias = new ArrayList();
        List<chemtools_logica.Entidades.Ubigeo> lista = lN_SFUbigeoRemote.getUbigeo(idDepartamento,null,"00");
        for(chemtools_logica.Entidades.Ubigeo ent : lista){
            provincias.add(new SelectItem(ent.getCod_prov(),ent.getProvincia()));
        }
        sessionScopeBeanalmacen.setListaProv(provincias);
        getSelectProvincia().setValue("00");
        Utils.addTarget(getSelectProvincia());
        sessionScopeBeanalmacen.setListaDist(new ArrayList());
        Utils.addTarget(getSelectDistrito());
    }
    
    public void llenarDistritos(ValueChangeEvent valueChangeEvent){
        String idProvincia = valueChangeEvent.getNewValue().toString();
        ArrayList distritos = new ArrayList();
        List<chemtools_logica.Entidades.Ubigeo> lista = lN_SFUbigeoRemote.getUbigeo(getSelectDepartamento().getValue().toString(), idProvincia, null);
        for(chemtools_logica.Entidades.Ubigeo ent : lista){
            distritos.add(new SelectItem(ent.getCod_dist(),ent.getDistrito()));
        }
        sessionScopeBeanalmacen.setListaDist(distritos);
        getSelectDistrito().setValue("00");
        Utils.addTarget(getSelectDistrito());
    }
    
    
    private static Context getInitialContext() throws NamingException {
        Hashtable env = new Hashtable();
        // WebLogic Server 10.x/12.x connection details
        env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
        env.put(Context.PROVIDER_URL, "t3://127.0.0.1:7101");
        return new InitialContext(env);
    }

    public void setSessionScopeBeanalmacen(bSessionScopeBeanalmacen sessionScopeBeanalmacen) {
        this.sessionScopeBeanalmacen = sessionScopeBeanalmacen;
    }

    public bSessionScopeBeanalmacen getSessionScopeBeanalmacen() {
        return sessionScopeBeanalmacen;
    }

    public void setForm(RichForm form) {
        this.form = form;
    }

    public RichForm getForm() {
        return form;
    }

    public void setTb_Almacen(RichTable tb_Almacen) {
        this.tb_Almacen = tb_Almacen;
    }

    public RichTable getTb_Almacen() {
        return tb_Almacen;
    }

    public void setPf_Busqueda(RichPanelGridLayout pf_Busqueda) {
        this.pf_Busqueda = pf_Busqueda;
    }

    public RichPanelGridLayout getPf_Busqueda() {
        return pf_Busqueda;
    }

    public void setCodigoInputBusqueda(RichInputText codigoInputBusqueda) {
        this.codigoInputBusqueda = codigoInputBusqueda;
    }

    public RichInputText getCodigoInputBusqueda() {
        return codigoInputBusqueda;
    }

    public void setNombreInputBusqueda(RichInputText nombreInputBusqueda) {
        this.nombreInputBusqueda = nombreInputBusqueda;
    }

    public RichInputText getNombreInputBusqueda() {
        return nombreInputBusqueda;
    }

    public void setPop_addAlmacen(RichPopup pop_addAlmacen) {
        this.pop_addAlmacen = pop_addAlmacen;
    }

    public RichPopup getPop_addAlmacen() {
        return pop_addAlmacen;
    }

    public void setPopEdit(RichPopup popEdit) {
        this.popEdit = popEdit;
    }

    public RichPopup getPopEdit() {
        return popEdit;
    }

    public void setBtnEditar(RichButton btnEditar) {
        this.btnEditar = btnEditar;
    }

    public RichButton getBtnEditar() {
        return btnEditar;
    }

    public void setBtnAgregar(RichButton btnAgregar) {
        this.btnAgregar = btnAgregar;
    }

    public RichButton getBtnAgregar() {
        return btnAgregar;
    }

    public void setSelectProvincia(RichSelectOneChoice selectProvincia) {
        this.selectProvincia = selectProvincia;
    }

    public RichSelectOneChoice getSelectProvincia() {
        return selectProvincia;
    }

    public void setSelectDistrito(RichSelectOneChoice selectDistrito) {
        this.selectDistrito = selectDistrito;
    }

    public RichSelectOneChoice getSelectDistrito() {
        return selectDistrito;
    }

    public void setSelectDepartamento(RichSelectOneChoice selectDepartamento) {
        this.selectDepartamento = selectDepartamento;
    }

    public RichSelectOneChoice getSelectDepartamento() {
        return selectDepartamento;
    }
}
